home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / util / wb / RndBdrop.lha / RandBackdrop.c < prev    next >
C/C++ Source or Header  |  1997-10-18  |  3KB  |  109 lines

  1. /* Program chooses randomly one of a number 
  2. ** of IFF files, and copies it to T: for display
  3. ** by the Workbench Preferences program.
  4. **
  5. ** Author:  A. Wyatt
  6. **
  7. ** Date: Oct 1997
  8. **
  9. ** Input:   source directory string
  10. **          short integer (number of files)
  11. **
  12. ** Output:  chooses randomly one of the files
  13. **          and copies it to "T:backdrop.iff"
  14. **
  15. ** Other requirements: Calls the Execute function
  16. **    need: Run
  17. **          Delete
  18. **          Copy
  19. **
  20. ** If you want to change the maximum number of files,
  21. ** change the parameter 'MAX_FILES' and the mask MAX_MASK
  22. **
  23. ** The mask is used to limit the range of random numbers
  24. ** so that it doesn't take too long to get one within 
  25. ** the range required. Leave the mask as (2^n -1).
  26. */
  27.  
  28. #include <stdio.h>
  29. #include <dos.h>
  30.  
  31. #define  AND &&
  32. #define  OR ||
  33. #define  EQ ==
  34. #define  NE !=
  35.  
  36. #define  MAX_FILES   1024
  37. #define  MAX_MASK    MAX_FILES - 1
  38.  
  39.          int  main (int, char *[]);
  40.  
  41. extern   Execute (char *, FILE *, FILE *);
  42. extern   time (int *);
  43. extern   void exit(int);
  44. extern   int srand (int);
  45. extern   int rand (void);
  46. extern   int dfind (struct FileInfoBlock *, const char *, int);
  47.  
  48. __aligned struct   FileInfoBlock fib;       /* for file lookup */
  49.  
  50. int main (int argc, char *argv[])
  51. {
  52.    int   number_files;              /* number files in directory */
  53.    int   seed;                      /* for random number generator */
  54.    int   rand_number;               /* result of random number generator */
  55.    char  fname[40];                 /* file name */
  56.    char  cmd_string [64];           /* string to pass to Execute */
  57.    int   result;                    /* result of Execute command */
  58.    struct   FileInfoBlock *fib_ptr = &fib; /* pointer to File Info Block */
  59.    
  60.    if (argc != 3)                   /* should be as in 'Usage' below */
  61.    {
  62.       printf ("Usage: RandBackdrop <directory> <number files>\n");
  63.       exit (10);
  64.    }
  65.  
  66.    sscanf (argv[2], "%d", &number_files);  /* get number of files */
  67.  
  68.    if ((number_files < 2) OR (number_files > MAX_FILES)) 
  69.    {
  70.       printf ("RandBackdrop: No files should be 2 - %d\n", MAX_FILES);
  71.       exit (10);
  72.    }
  73.  
  74.    seed = time (NULL);              /* = 'Randomise' */
  75.    srand (seed);           /* start at a random place */
  76.  
  77.    /* now make up a random number [1 - number_files] */
  78.  
  79.    do
  80.    {
  81.    rand_number = rand () & MAX_MASK;  /* get a number */
  82.    }  while (rand_number >= number_files);
  83.  
  84.    sprintf (fname, "%s/pix%03d.iff", argv [1], rand_number + 1);
  85.    
  86.    result = dfind (fib_ptr, fname, 0);     /* look up file in directory */
  87.  
  88.    if (result EQ 0)
  89.    {
  90.       /* look for T:Backdrop.iff and delete if already there */
  91.  
  92.       result = dfind (fib_ptr, "T:Backdrop.iff", 0);  
  93.       if (result EQ 0) 
  94.       {
  95.  printf ("Randbackdrop: File T:Backdrop.iff exists - delete and re-run\n");
  96.          exit (10);
  97.       }      
  98.       sprintf (cmd_string, "Copy %s T:Backdrop.iff\n", fname);
  99.  
  100.       Execute (cmd_string, NULL, stdout);
  101.    
  102.       return (0);      /* success */
  103.    }
  104.  
  105.    printf ("RandBackdrop: Can't find file '%s'\n", fname);
  106.    return (10);
  107. }
  108.  
  109.